Cloud Functions for Firebase(Python)でHTTPリクエスト経由でOpen AIのAPIを使ってみた
こんにちは、ゲームソリューション部のsoraです。
今回は、Cloud Functions for Firebase(Python)でHTTPリクエスト経由でOpen AIのAPIを使ってみたことについて書いていきます。
シークレットキーの登録、権限周りの接続エラーに対する設定変更についても記載します。
firebase init
でCloud Functions用のフォルダの作成することなどは解説しません。
「Cloud Functions for FirebaseをPythonで使ってみた」ことについては、Firebase CLIのインストールなどから以下記事にて記載しています。
シークレットキーの登録
まずOpen AIのAPIを使用するためのAPIキーをシークレットキーとして登録します。
ちなみに、無料枠もあって、Firebaseプロジェクトに対して、1カ月あたり6シークレットを無料で使用できます。
アクセスに対する課金は、1つのシークレットに対して、毎月1万回のアクセスが無料です。
# シークレットキーの登録 $ firebase functions:secrets:set OPENAI_KEY # ⇒実行後に値を入力する # 確認 ## 値の確認 $ firebase functions:secrets:access OPENAI_KEY # ⇒値が表示される ## バージョンと状態の確認 $ functions:secrets:get SECRET_NAME # 削除 $ firebase functions:secrets:destroy OPENAI_KEY ? Are you sure you want to destroy OPENAI_KEY@1 Yes i Destroyed secret version OPENAI_KEY@1 i No active secret versions left. Destroying secret OPENAI_KEY # 参照されていないシークレットを削除 $ functions:secrets:prune
シークレットキーを使用してローカルでテストする場合は、.secret.local
ファイルや.env.local
などにSECRET_NAME=value
の形で記述して、functionsディレクトリに配置しておくとテストできます。
エミュレータのサポート
コードの解説
コードは以下です。
リージョンはデフォルトでus-central1
になっているため、asia-northeast1(東京)
にしています。
from firebase_functions import https_fn, options from firebase_functions.params import SecretParam from firebase_admin import initialize_app from openai import OpenAI import os initialize_app() # リージョンの指定 options.set_global_options(region=options.SupportedRegion.ASIA_NORTHEAST1) # 設定したsecretsの設定 @https_fn.on_request(secrets=["OPENAI_KEY"]) def test_api(req: https_fn.Request) -> https_fn.Response: client = OpenAI( # secretsの値を取得 api_key = os.environ.get('OPENAI_KEY'), ) # リクエストパラメータの取得 req_text = req.args['message'] response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "あなたはAIではありません。人間として自然な会話をしてください。"}, {"role": "user", "content": req_text}], ) res_text = response.choices[0].message.content return res_text
openaiのライブラリも忘れずに追加しておきます。
firebase_functions~=0.1.0 openai
デプロイ・実行確認
コードが完成したためデプロイします。
# 仮想環境上でライブラリのインストール $ /home/{user}/test/functions/venv/bin/activate" && python3.12 -m pip install -r requirements.txt # 仮想環境の終了(実行しなくても問題はない) (venv):~$ deactivate # デプロイ firebase deploy --only functions:test_api
リクエストパラメータ(?message=感動する話をしてください
)を含めてアクセスすると、以下のように回答が表示されました。
接続の権限エラーが発生した場合
最初、ここまでの流れでデプロイまで行いアクセスしてみると、以下のようなエラーが出ました。
調べてみると、Cloud Runにてアクセスに認証必須となっているため、「未認証の呼び出しを許可」にすることでアクセスが可能になります。
(今回はテスト用ですぐに削除するものなため認証なしにしていますが、誰でもアクセスできるようになるため本番利用時は注意してください)
最後に
今回は、Cloud Functions for Firebase(Python)でHTTPリクエスト経由でOpen AI APIを使ってみたことを記事にしました。
どなたかの参考になると幸いです。